home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / intrvews / xgrab.lha / xgrab / grabst / attribute.c next >
C/C++ Source or Header  |  1990-03-06  |  4KB  |  239 lines

  1. /**
  2.    GRAB Graph Layout and Browser System
  3.  
  4.    Copyright (c) 1989, Tera Computer Company
  5.  **/
  6.  
  7. #include "attribute.h"
  8.  
  9.   /**
  10.      This file contains routines to convert strings into enumerated types 
  11.      and vice versa
  12.    **/
  13.  
  14. #define MAXCOLORNAMES 5
  15. #define MAXBOOLNAMES 2
  16. #define MAXBRUSHNAMES 8
  17. #define MAXSHAPENAMES 11
  18. #define MAXSTATUSNAMES 3
  19.  
  20. typedef struct
  21. {
  22.     char *name;
  23.     BOOL bool;
  24. } BOOLPAIR;
  25.  
  26. typedef struct 
  27. {
  28.     char *name;
  29.     BRUSH brush;
  30. } BRUSHPAIR;
  31.  
  32. typedef struct 
  33. {
  34.     char *name;
  35.     SHAPE shape;
  36. } SHAPEPAIR;
  37.  
  38. typedef struct 
  39. {
  40.     char *name;
  41.     STATUS status;
  42. } STATUSPAIR;
  43.  
  44. typedef struct 
  45. {
  46.     char *name;
  47.     COLOR color;
  48. } COLORPAIR;
  49.  
  50. static BOOLPAIR BoolPairs[MAXBOOLNAMES] = 
  51. {
  52.     { "false", FALSE },
  53.     { "true", TRUE }
  54. };
  55.  
  56. static STATUSPAIR StatusPairs[MAXSTATUSNAMES] = 
  57. {
  58.     { "normal", NORMAL },
  59.     { "dummy", DUMMY },
  60.     { "default", DEFAULT_STATUS }
  61. };
  62.  
  63. static COLORPAIR ColorPairs[MAXCOLORNAMES] = 
  64. {
  65.     { "black", BLACK },
  66.     { "gray", GRAY },
  67.     { "white", WHITE },
  68.     { "default", DEFAULT_COLOR },
  69.     { "grey", GRAY }
  70. };
  71.     
  72. static BRUSHPAIR BrushPairs[MAXBRUSHNAMES] = 
  73. {
  74.     { "solid", SOLIDB },
  75.     { "bsolid", BSOLIDB },
  76.     { "dotted", DOTTEDB },
  77.     { "bdotted", BDOTTEDB },
  78.     { "dashed", DASHEDB },
  79.     { "bdashed", BDASHEDB },
  80.     { "default", DEFAULT_BRUSH },
  81.     { "bold", BSOLIDB },
  82. };
  83.     
  84. static SHAPEPAIR ShapePairs[MAXSHAPENAMES] = 
  85. {
  86.     { "rectangle", RECTANGLE },
  87.     { "circle", CIRCLE },
  88.     { "diamond", DIAMOND },
  89.     { "oval", OVAL },
  90.     { "point", POINT },
  91.     { "double_box", DOUBLE_BOX },
  92.     { "default", DEFAULT_SHAPE },
  93.     { "rect", RECTANGLE },
  94.     { "box", RECTANGLE },
  95.     { "ellipse", OVAL },
  96.     { "dot", POINT }
  97. };
  98.     
  99.   /**
  100.      string-to-type routines all follow the same pattern.  First, convert
  101.      all capital letters to lower case (case doesn't matter in strings).
  102.      Then, compare the string to the strings in the appropriate structure
  103.      above.  If there's no match, return the default value.
  104.    **/
  105.  
  106. COLOR string_to_color(s)
  107. char *s;
  108. {
  109.     int i;
  110.  
  111.     convert_to_lower(s);
  112.  
  113.     for (i = 0; i < MAXCOLORNAMES; i++)
  114.     {
  115.     if (!strcmp(s, ColorPairs[i].name))
  116.     {
  117.         return ColorPairs[i].color;
  118.     }
  119.     }
  120.  
  121.     return DEFAULT_COLOR;
  122. }
  123.  
  124. STATUS string_to_status(s)
  125. char *s;
  126. {
  127.     int i;
  128.  
  129.     convert_to_lower(s);
  130.  
  131.     for (i = 0; i < MAXSTATUSNAMES; i++)
  132.     {
  133.     if (!strcmp(s, StatusPairs[i].name))
  134.     {
  135.         return StatusPairs[i].status;
  136.     }
  137.     }
  138.  
  139.     return DEFAULT_STATUS;
  140. }
  141.  
  142. BRUSH string_to_brush(s)
  143. char *s;
  144. {
  145.     int i;
  146.  
  147.     convert_to_lower(s);
  148.  
  149.     for (i = 0; i < MAXBRUSHNAMES; i++)
  150.     {
  151.     if (!strcmp(s, BrushPairs[i].name))
  152.     {
  153.         return BrushPairs[i].brush;
  154.     }
  155.     }
  156.  
  157.     return DEFAULT_BRUSH;
  158. }
  159.  
  160. SHAPE string_to_shape(s)
  161. char *s;
  162. {
  163.     int i;
  164.  
  165.     convert_to_lower(s);
  166.  
  167.     for (i = 0; i < MAXSHAPENAMES; i++)
  168.     {
  169.     if (!strcmp(s, ShapePairs[i].name))
  170.     {
  171.         return ShapePairs[i].shape;
  172.     }
  173.     }
  174.  
  175.     return DEFAULT_SHAPE;
  176. }
  177.  
  178. BOOL string_to_bool(s)
  179. char *s;
  180. {
  181.     int i;
  182.  
  183.     convert_to_lower(s);
  184.  
  185.     for (i = 0; i < MAXBOOLNAMES; i++)
  186.     {
  187.     if (!strcmp(s, BoolPairs[i].name))
  188.     {
  189.         return BoolPairs[i].bool;
  190.     }
  191.     }
  192.  
  193.     return FALSE;
  194. }
  195.  
  196. convert_to_lower(s)
  197. char *s;
  198. {
  199.     char *t;
  200.  
  201.     for (t = s; *t != '\0'; t++)
  202.     {
  203.     if (*t >= 'A' && *t <= 'Z')
  204.     {
  205.         *t = *t - 'A' + 'a';
  206.     }
  207.     }
  208. }
  209.  
  210. char *status_to_string(s)
  211. STATUS s;
  212. {
  213.     return StatusPairs[(int) s].name;
  214. }
  215.  
  216. char *color_to_string(c)
  217. COLOR c;
  218. {
  219.     return ColorPairs[(int) c].name;
  220. }
  221.  
  222. char *brush_to_string(b)
  223. BRUSH b;
  224. {
  225.     return BrushPairs[(int) b].name;
  226. }
  227.  
  228. char *shape_to_string(s)
  229. SHAPE s;
  230. {
  231.     return ShapePairs[(int) s].name;
  232. }
  233.  
  234. char *bool_to_string(b)
  235. BOOL b;
  236. {
  237.     return BoolPairs[(int) b].name;
  238. }
  239.